package com.design.yjx.templatemethod;

/**
 * @author yuanjianxin
 * @date 2017/8/22 11:09
 * 抽象超类
 */
public abstract class CaffeineBeverage {

    //定义一个模板方法
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        if (isAddCondiment()) {
            addCondiments();
        }
    }

    abstract void brew();

    abstract void addCondiments();

    public void boilWater() {
        System.out.println("煮开水");
    }

    public void pourInCup() {
        System.out.println("倒入杯中");
    }

    //"钩子"方法，父类一般提供一个默认实现，由子类决定是否覆盖
    public boolean isAddCondiment(){
        return  true;
    }


}
